package com.allen.study.test_common.utils.excel;// package com.allen.study.test_common.utils.excel;
//
// import com.alibaba.excel.context.AnalysisContext;
// import com.alibaba.excel.metadata.CellData;
// import com.alibaba.excel.metadata.CellExtra;
// import com.alibaba.excel.read.listener.ReadListener;
// import lombok.extern.slf4j.Slf4j;
//
// import java.util.ArrayList;
// import java.util.List;
// import java.util.Map;
// import java.util.function.Consumer;
// import java.util.function.Predicate;
//
// /**
//  * 通用监听器类
//  * @ClassName: GenericExcelListener
//  * @Author: AllenSun
//  * @Date: 2025/2/27 下午8:52
//  */
// @Slf4j
// public class GenericExcelListener<T> implements ReadListener<T> {
//     private static final int DEFAULT_BATCH_SIZE = 100;
//     private List<T> cachedDataList = new ArrayList<>(DEFAULT_BATCH_SIZE);
//     private Predicate<T> dataFilter;  // 数据过滤条件
//     private Consumer<List<T>> batchConsumer;  // 批量处理逻辑
//     private int batchSize;
//
//     // 构造方法（支持自定义批处理大小、过滤条件）
//     public GenericExcelListener(Consumer<List<T>> batchConsumer, Predicate<T> dataFilter, int batchSize) {
//         this.batchConsumer = batchConsumer;
//         this.dataFilter = dataFilter;
//         this.batchSize = batchSize;
//     }
//
//     // 默认构造方法（无过滤条件，默认批处理大小）
//     public GenericExcelListener(Consumer<List<T>> batchConsumer) {
//         this(batchConsumer, data -> true, DEFAULT_BATCH_SIZE);
//     }
//
//     @Override
//     public void onException(Exception e, AnalysisContext analysisContext) throws Exception {
//
//     }
//
//     @Override
//     public void invokeHead(Map<Integer, CellData> map, AnalysisContext analysisContext) {
//
//     }
//
//     @Override
//     public void invoke(T data, AnalysisContext context) {
//         if (dataFilter.test(data)) {  // 过滤无效数据
//             cachedDataList.add(data);
//             if (cachedDataList.size() >= batchSize) {
//                 log.info("解析出数据量：{}",cachedDataList.size());
//                 batchConsumer.accept(cachedDataList);
//                 cachedDataList.clear();
//             }
//         }
//     }
//
//     @Override
//     public void extra(CellExtra cellExtra, AnalysisContext analysisContext) {
//
//     }
//
//     @Override
//     public void doAfterAllAnalysed(AnalysisContext context) {
//         if (!cachedDataList.isEmpty()) {  // 处理剩余数据
//             log.info("待处理数据量：{}",cachedDataList.size());
//             batchConsumer.accept(cachedDataList);
//         }
//     }
//
//     @Override
//     public boolean hasNext(AnalysisContext analysisContext) {
//         return false;
//     }
// }
